package com.link.base.base.autoconfig.nocode.service;

import com.link.base.base.autoconfig.nocode.model.LnkInnerCode;
import com.link.core.basic.service.BasicService;

import java.util.List;

/**
 * 自动配置的代码版本
 *
 * @author 何启谦
 * @date 2019/09/06 14:36
 */
public interface LnkInnerCodeService extends BasicService<LnkInnerCode> {

    /**
     * 计算并获取获取新版本号
     *
     * @param lnkInnerObjectId 自动配置头id
     * @return 版本号
     */
    int getNewVersion(Long lnkInnerObjectId);

    /**
     * 生成代码
     *
     * @param lnkInnerObjectId 自动配置头id
     */
    LnkInnerCode generateCode(Long lnkInnerObjectId) throws Exception;

    /**
     * 根据"对象路径"获取已部署的版本对象，注意可能返回null
     *
     * @param modelPath 对象路径
     * @return 版本对象
     */
    LnkInnerCode queryDeployedByModelPath(String modelPath) throws Exception;

    /**
     * 根据"对象路径"获取已部署的版本对象，注意可能返回null
     *
     * @param lnkInnerObjectId 自动配置头id
     * @return 版本对象
     */
    LnkInnerCode queryDeployedByHeadId(Long lnkInnerObjectId) throws Exception;

    /**
     * 校验代码
     */
    void checkCode(Long id) throws Exception;

    /**
     * 发布版本
     */
    void deploy(Long id) throws Exception;

    /**
     * 卸载版本
     *
     * @param lnkInnerObjectId 头id
     */
    void uninstall(Long lnkInnerObjectId) throws Exception;

    /**
     * 新建，然后发布版本
     */
    void insertAndDeploy(LnkInnerCode entity) throws Exception;

    /**
     * 根据ID查询代码内容，有且仅有这个方法能查询代码内容，也不要加多余的字段
     *
     * @param id     版本id
     * @param entity 接收代码内容的载体
     */
    void setCodeContentById(Long id, LnkInnerCode entity);

    /**
     * 根据modelPath查询当前部署的Vue代码
     *
     * @param modelPath 对象路径
     * @return 前端vue代码
     * @throws Exception 异常
     */
    String getDeployedVueCode(String modelPath) throws Exception;

    /**
     * 查询所有计划发版部署的模块
     *
     * @return list
     * @throws Exception 异常
     */
    List<LnkInnerCode> queryAllPlanDeploy() throws Exception;
}
